// middleware/errorHandler.js
module.exports = () => {
    return async (ctx, next) => {
        try {
            await next()

            // 处理 404 错误
            if (ctx.status === 404 && !ctx.body) {
                ctx.status = 404
                ctx.body = {
                    code: 404,
                    message: '请求的资源不存在',
                    data: null
                }
            }
        } catch (err) {
            // 记录错误日志
            console.error('Server error:', err, ctx)

            // 设置默认错误状态码
            ctx.status = err.status || 500

            // 根据环境返回不同的错误信息
            const isProduction = process.env.NODE_ENV === 'production'

            // 生产环境下不返回详细的错误信息
            const message = isProduction && ctx.status === 500 
            ? '服务器内部错误' 
            : err.message

            // 返回标准化的错误响应
            ctx.body = {
                code: ctx.status,
                message: message,
                data: null,
                // 开发环境下返回堆栈信息
                ...(!isProduction && { stack: err.stack })
            }

            // 触发错误事件，让应用层可以进一步处理
            ctx.app.emit('error', err, ctx)
        }
    }
}
